--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit cc11fccab76e4ddd38d9128f74054f8b77be8d4a
Parents : fcbea73
Author : Ivan <ivan@quad4.io>
Signature : Signature validation error
Date : 2026-04-24T14:34:13-05:00
feat(locales): add NomadNet favourites import/export functionality and update contact sharing options across multiple languages
Changes
8 files changed, 111 insertions(+), 23 deletions(-)
Diff
diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index 75b09b88..16f6cc12 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -597,7 +597,13 @@
"archives_cleared": "Archive erfolgreich gelöscht",
"docs_cleared": "Reticulum-Dokumentation erfolgreich gelöscht",
"import_success": "Erfolgreich {count} Nachrichten importiert",
- "import_failed": "Nachrichten konnten nicht importiert werden"
+ "import_failed": "Nachrichten konnten nicht importiert werden",
+ "export_nomadnet_favourites": "NomadNet-Favoriten exportieren",
+ "import_nomadnet_favourites": "NomadNet-Favoriten importieren",
+ "nomadnet_favourites_exported": "NomadNet-Favoriten-Layout exportiert",
+ "nomadnet_favourites_export_failed": "NomadNet-Favoriten konnten nicht exportiert werden",
+ "nomadnet_favourites_imported": "NomadNet-Favoriten-Layout importiert",
+ "nomadnet_favourites_import_failed": "NomadNet-Favoriten-Datei konnte nicht importiert werden"
},
"identities": {
"title": "Identitäten",
@@ -1106,6 +1112,8 @@
"telemetry_location_request": "Standortanfrage",
"start_call": "Anruf",
"share_contact": "Kontakt teilen",
+ "share_contact_modal_title": "Kontakt teilen",
+ "share_contact_search_placeholder": "Kontakte durchsuchen…",
"opportunistic_deferred_label": "Wartend",
"opportunistic_deferred_tooltip": "Die Nachricht wird gesendet, sobald der Nutzer online ist oder eine Ankündigung sendet.",
"no_messages_in_conversation": "Noch keine Nachrichten in diesem Gespräch.",
@@ -1297,7 +1305,10 @@
"path_finder_not_found": "Kein Pfad innerhalb des Zeitlimits gefunden",
"path_finder_dropped_and_requested": "Pfad verworfen, neue Anforderung läuft",
"path_finder_failed": "Pfadfinder-Anforderung fehlgeschlagen",
- "path_finder_archive_loading": "Suche nach Archiv-Snapshot..."
+ "path_finder_archive_loading": "Suche nach Archiv-Snapshot...",
+ "export_section_favourites": "Abschnitts-Favoriten exportieren",
+ "section_favourites_exported": "Abschnitts-Favoriten exportiert",
+ "section_favourites_export_failed": "Abschnitts-Favoriten konnten nicht exportiert werden"
},
"forwarder": {
"title": "LXMF-Weiterleiter",
diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index 5868d845..e45b48b2 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -597,7 +597,13 @@
"archives_cleared": "Archives cleared successfully",
"docs_cleared": "Reticulum documentation cleared successfully",
"import_success": "Successfully imported {count} messages",
- "import_failed": "Failed to import messages"
+ "import_failed": "Failed to import messages",
+ "export_nomadnet_favourites": "Export NomadNet favourites",
+ "import_nomadnet_favourites": "Import NomadNet favourites",
+ "nomadnet_favourites_exported": "NomadNet favourites layout exported",
+ "nomadnet_favourites_export_failed": "Could not export NomadNet favourites",
+ "nomadnet_favourites_imported": "NomadNet favourites layout imported",
+ "nomadnet_favourites_import_failed": "Could not import NomadNet favourites file"
},
"identities": {
"title": "Identities",
@@ -1046,6 +1052,8 @@
"telemetry_location_request": "Location Request",
"start_call": "Call",
"share_contact": "Share contact",
+ "share_contact_modal_title": "Share contact",
+ "share_contact_search_placeholder": "Search contacts…",
"custom_display_name": "Custom Display Name",
"stranger_banner_text": "This peer is not in your contacts. Attachments from strangers are blocked.",
"add_to_contacts": "Add to Contacts",
@@ -1357,7 +1365,10 @@
"path_finder_not_found": "No path found within timeout",
"path_finder_dropped_and_requested": "Path dropped, requesting again",
"path_finder_failed": "Path finder request failed",
- "path_finder_archive_loading": "Looking for archive snapshot..."
+ "path_finder_archive_loading": "Looking for archive snapshot...",
+ "export_section_favourites": "Export section favourites",
+ "section_favourites_exported": "Section favourites exported",
+ "section_favourites_export_failed": "Could not export section favourites"
},
"forwarder": {
"title": "LXMF Forwarder",
diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index a51c8c0c..3e31b112 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -150,7 +150,7 @@
"incoming_message_size_unit_mb": "MB",
"incoming_message_size_unit_gb": "GB",
"auto_sync_interval": "Auto Sync Interval",
- "last_synced": "Última sincronización hace{time}.",
+ "last_synced": "Última sincronización hace {time}.",
"last_synced_never": "Última sincronización: nunca.",
"propagation_stamp_cost": "Propagation Node Stamp Cost",
"propagation_stamp_description": "Requiere sellos de prueba de trabajo para mensajes propagados a través de su nodo. Los valores superiores requieren un trabajo más computacional. Rango: 13-254. Predeterminado: 16. **Nota:** Cambiar esto requiere reiniciar la aplicación.",
@@ -161,7 +161,7 @@
"identity": "Identidad",
"lxmf_address_hash": "LXMF Dirección Hash",
"propagation_node_status": "Propagation Node Status",
- "last_sync": "Last Sync:{time}ago",
+ "last_sync": "Último sync: hace {time}",
"last_sync_never": "Último Sync: nunca",
"syncing": "Sincronización...",
"synced": "Sin embargo",
@@ -597,7 +597,13 @@
"archives_cleared": "Archivos resueltos con éxito",
"docs_cleared": "Documentación de reticulum con éxito",
"import_success": "Mensajes{count}importados con éxito",
- "import_failed": "No importar mensajes"
+ "import_failed": "No importar mensajes",
+ "export_nomadnet_favourites": "Exportar favoritos NomadNet",
+ "import_nomadnet_favourites": "Importar favoritos NomadNet",
+ "nomadnet_favourites_exported": "Diseño de favoritos NomadNet exportado",
+ "nomadnet_favourites_export_failed": "No se pudieron exportar los favoritos NomadNet",
+ "nomadnet_favourites_imported": "Diseño de favoritos NomadNet importado",
+ "nomadnet_favourites_import_failed": "No se pudo importar el archivo de favoritos NomadNet"
},
"identities": {
"title": "Identidades",
@@ -1046,6 +1052,8 @@
"telemetry_location_request": "Solicitud de ubicación",
"start_call": "Call",
"share_contact": "Comparta contacto",
+ "share_contact_modal_title": "Compartir contacto",
+ "share_contact_search_placeholder": "Buscar contactos…",
"custom_display_name": "Nombre de la pantalla personalizada",
"stranger_banner_text": "Este pare no está en tus contactos. Los adjuntos de extraños están bloqueados.",
"add_to_contacts": "Añadir a Contactos",
@@ -1318,7 +1326,7 @@
"no_favourites": "Sin favoritos",
"add_nodes_from_announces": "Agregue nodos de la pestaña anuncia.",
"search_announces": "Búsqueda anuncia",
- "announced_time_ago": "Announced{time}ago",
+ "announced_time_ago": "Anunciado hace {time}",
"block_node": "Destierro",
"no_announces_yet": "No anuncia todavía",
"no_search_results_peers": "No encontraron pares que coincidan con su búsqueda.",
@@ -1357,7 +1365,10 @@
"path_finder_not_found": "No se encontró ruta dentro del tiempo de espera",
"path_finder_dropped_and_requested": "Ruta descartada, solicitando de nuevo",
"path_finder_failed": "La solicitud del buscador de ruta falló",
- "path_finder_archive_loading": "Buscando instantánea de archivo..."
+ "path_finder_archive_loading": "Buscando instantánea de archivo...",
+ "export_section_favourites": "Exportar favoritos de la sección",
+ "section_favourites_exported": "Favoritos de la sección exportados",
+ "section_favourites_export_failed": "No se pudieron exportar los favoritos de la sección"
},
"forwarder": {
"title": "LXMF Forwarder",
diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index 1498daac..2674b5e2 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -597,7 +597,13 @@
"archives_cleared": "Archives nettoyées avec succès",
"docs_cleared": "La documentation du réticulum a été nettoyée avec succès",
"import_success": "Messages{count}importés avec succès",
- "import_failed": "Impossible d'importer des messages"
+ "import_failed": "Impossible d'importer des messages",
+ "export_nomadnet_favourites": "Exporter les favoris NomadNet",
+ "import_nomadnet_favourites": "Importer les favoris NomadNet",
+ "nomadnet_favourites_exported": "Disposition des favoris NomadNet exportée",
+ "nomadnet_favourites_export_failed": "Impossible d'exporter les favoris NomadNet",
+ "nomadnet_favourites_imported": "Disposition des favoris NomadNet importée",
+ "nomadnet_favourites_import_failed": "Impossible d'importer le fichier des favoris NomadNet"
},
"identities": {
"title": "Identités",
@@ -1046,6 +1052,8 @@
"telemetry_location_request": "Demande de localisation",
"start_call": "Appeler",
"share_contact": "Partager le contact",
+ "share_contact_modal_title": "Partager le contact",
+ "share_contact_search_placeholder": "Rechercher des contacts…",
"custom_display_name": "Affichage personnalisé",
"stranger_banner_text": "Ce pair n'est pas dans vos contacts. Les pièces jointes des étrangers sont bloquées.",
"add_to_contacts": "Ajouter aux contacts",
@@ -1318,7 +1326,7 @@
"no_favourites": "Pas de favoris",
"add_nodes_from_announces": "Ajouter des nœuds de l'onglet Annonces.",
"search_announces": "La recherche annonce",
- "announced_time_ago": "Annoncé{time}il y a",
+ "announced_time_ago": "Annoncé il y a {time}",
"block_node": "Nœud baigné",
"no_announces_yet": "Pas encore d'annonce",
"no_search_results_peers": "Aucun pair trouvé correspondant à votre recherche.",
@@ -1357,7 +1365,10 @@
"path_finder_not_found": "Aucun chemin trouvé dans le délai imparti",
"path_finder_dropped_and_requested": "Chemin abandonné, nouvelle demande en cours",
"path_finder_failed": "Échec de la demande du chercheur de chemin",
- "path_finder_archive_loading": "Recherche d'un instantané d'archive..."
+ "path_finder_archive_loading": "Recherche d'un instantané d'archive...",
+ "export_section_favourites": "Exporter les favoris de la section",
+ "section_favourites_exported": "Favoris de la section exportés",
+ "section_favourites_export_failed": "Impossible d'exporter les favoris de la section"
},
"forwarder": {
"title": "Expéditeur LXMF",
diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 3b0a591e..fb9f5b43 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -597,7 +597,13 @@
"archives_cleared": "Archivi cancellati con successo",
"docs_cleared": "Documentazione Reticulum cancellata con successo",
"import_success": "Importati con successo {count} messaggi",
- "import_failed": "Impossibile importare i messaggi"
+ "import_failed": "Impossibile importare i messaggi",
+ "export_nomadnet_favourites": "Esporta preferiti NomadNet",
+ "import_nomadnet_favourites": "Importa preferiti NomadNet",
+ "nomadnet_favourites_exported": "Layout preferiti NomadNet esportato",
+ "nomadnet_favourites_export_failed": "Impossibile esportare i preferiti NomadNet",
+ "nomadnet_favourites_imported": "Layout preferiti NomadNet importato",
+ "nomadnet_favourites_import_failed": "Impossibile importare il file dei preferiti NomadNet"
},
"identities": {
"title": "Identità",
@@ -1106,6 +1112,8 @@
"telemetry_location_request": "Richiesta posizione",
"start_call": "Chiama",
"share_contact": "Condividi contatto",
+ "share_contact_modal_title": "Condividi contatto",
+ "share_contact_search_placeholder": "Cerca contatti…",
"opportunistic_deferred_label": "In attesa",
"opportunistic_deferred_tooltip": "Il messaggio verrà inviato quando l'utente sarà online o invierà un annuncio.",
"no_messages_in_conversation": "Ancora nessun messaggio in questa conversazione.",
@@ -1409,7 +1417,10 @@
"path_finder_not_found": "Nessun percorso trovato entro il timeout",
"path_finder_dropped_and_requested": "Percorso annullato, nuova richiesta in corso",
"path_finder_failed": "Richiesta di ricerca percorso fallita",
- "path_finder_archive_loading": "Ricerca dello snapshot d'archivio..."
+ "path_finder_archive_loading": "Ricerca dello snapshot d'archivio...",
+ "export_section_favourites": "Esporta preferiti della sezione",
+ "section_favourites_exported": "Preferiti della sezione esportati",
+ "section_favourites_export_failed": "Impossibile esportare i preferiti della sezione"
},
"forwarder": {
"title": "Inoltro LXMF",
diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index 95d5c62c..693c13d7 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -150,7 +150,7 @@
"incoming_message_size_unit_mb": "MB",
"incoming_message_size_unit_gb": "GB",
"auto_sync_interval": "Interval automatisch synchroniseren",
- "last_synced": "Laatst gesynchroniseerd{time}geleden.",
+ "last_synced": "Laatst gesynchroniseerd {time} geleden.",
"last_synced_never": "Laatst gesynchroniseerd: nooit.",
"propagation_stamp_cost": "Propagatieknooppunt stempelkosten",
"propagation_stamp_description": "Vereiste proof-of-work stempels voor berichten gepropageerd via uw knooppunt. Hogere waarden vereisen meer rekenwerk. Bereik: 13-254. Standaard: 16. **Opmerking:** Dit veranderen vereist het herstarten van de app.",
@@ -161,7 +161,7 @@
"identity": "Identiteit",
"lxmf_address_hash": "LXMF Adres Hash",
"propagation_node_status": "Propagatieknooppuntstatus",
- "last_sync": "Laatste synchronisatie:{time}geleden",
+ "last_sync": "Laatste synchronisatie: {time} geleden",
"last_sync_never": "Laatste synchronisatie: nooit",
"syncing": "Synchroniseren...",
"synced": "Gesynchroniseerd",
@@ -597,7 +597,13 @@
"archives_cleared": "Archieven succesvol goedgekeurd",
"docs_cleared": "Reticulum documentatie succesvol gewist",
"import_success": "Met succes geïmporteerd{count}berichten",
- "import_failed": "Kon berichten niet importeren"
+ "import_failed": "Kon berichten niet importeren",
+ "export_nomadnet_favourites": "NomadNet-favorieten exporteren",
+ "import_nomadnet_favourites": "NomadNet-favorieten importeren",
+ "nomadnet_favourites_exported": "NomadNet-favorietenindeling geëxporteerd",
+ "nomadnet_favourites_export_failed": "NomadNet-favorieten konden niet worden geëxporteerd",
+ "nomadnet_favourites_imported": "NomadNet-favorietenindeling geïmporteerd",
+ "nomadnet_favourites_import_failed": "NomadNet-favorietenbestand kon niet worden geïmporteerd"
},
"identities": {
"title": "Identiteiten",
@@ -1046,6 +1052,8 @@
"telemetry_location_request": "Locatieverzoek",
"start_call": "Oproep",
"share_contact": "Contact delen",
+ "share_contact_modal_title": "Contact delen",
+ "share_contact_search_placeholder": "Contacten zoeken…",
"custom_display_name": "Aangepaste schermnaam",
"stranger_banner_text": "Deze peer staat niet in je contacten. De bijlagen van vreemden zijn geblokkeerd.",
"add_to_contacts": "Toevoegen aan contacten",
@@ -1318,7 +1326,7 @@
"no_favourites": "Geen favorieten",
"add_nodes_from_announces": "Voeg nodes toe vanaf het tabblad kondigt.",
"search_announces": "Zoekopdracht kondigt aan",
- "announced_time_ago": "Aangekondigd{time}geleden",
+ "announced_time_ago": "Aangekondigd {time} geleden",
"block_node": "Knooppunt verwijderen",
"no_announces_yet": "Nog geen aankondigingen",
"no_search_results_peers": "Geen peers gevonden die overeenkomen met uw zoekopdracht.",
@@ -1357,7 +1365,10 @@
"path_finder_not_found": "Geen pad gevonden binnen time-out",
"path_finder_dropped_and_requested": "Pad verwijderd, nieuwe aanvraag bezig",
"path_finder_failed": "Padzoeker-aanvraag mislukt",
- "path_finder_archive_loading": "Zoeken naar archief-snapshot..."
+ "path_finder_archive_loading": "Zoeken naar archief-snapshot...",
+ "export_section_favourites": "Favorieten van sectie exporteren",
+ "section_favourites_exported": "Favorieten van sectie geëxporteerd",
+ "section_favourites_export_failed": "Favorieten van sectie konden niet worden geëxporteerd"
},
"forwarder": {
"title": "LXMF Forwarder",
diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 9ddadffa..d5973e57 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -597,7 +597,13 @@
"archives_cleared": "Архивы успешно очищены",
"docs_cleared": "Документация Reticulum успешно очищена",
"import_success": "Успешно импортировано {count} сообщений",
- "import_failed": "Не удалось импортировать сообщения"
+ "import_failed": "Не удалось импортировать сообщения",
+ "export_nomadnet_favourites": "Экспорт избранного NomadNet",
+ "import_nomadnet_favourites": "Импорт избранного NomadNet",
+ "nomadnet_favourites_exported": "Макет избранного NomadNet экспортирован",
+ "nomadnet_favourites_export_failed": "Не удалось экспортировать избранное NomadNet",
+ "nomadnet_favourites_imported": "Макет избранного NomadNet импортирован",
+ "nomadnet_favourites_import_failed": "Не удалось импортировать файл избранного NomadNet"
},
"identities": {
"title": "Личности",
@@ -1106,6 +1112,8 @@
"telemetry_location_request": "Запрос местоположения",
"start_call": "Звонок",
"share_contact": "Поделиться контактом",
+ "share_contact_modal_title": "Поделиться контактом",
+ "share_contact_search_placeholder": "Поиск контактов…",
"opportunistic_deferred_label": "Ожидание",
"opportunistic_deferred_tooltip": "Сообщение отправится, когда пользователь будет в сети или отправит объявление.",
"no_messages_in_conversation": "В этом чате пока нет сообщений.",
@@ -1297,7 +1305,10 @@
"path_finder_not_found": "Маршрут не найден в течение тайм-аута",
"path_finder_dropped_and_requested": "Маршрут сброшен, выполняется повторный запрос",
"path_finder_failed": "Запрос поиска маршрута не удался",
- "path_finder_archive_loading": "Поиск снимка архива..."
+ "path_finder_archive_loading": "Поиск снимка архива...",
+ "export_section_favourites": "Экспорт избранного раздела",
+ "section_favourites_exported": "Избранное раздела экспортировано",
+ "section_favourites_export_failed": "Не удалось экспортировать избранное раздела"
},
"forwarder": {
"title": "LXMF Форвардер",
diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index 9652a5a1..4c027cb7 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -597,7 +597,13 @@
"archives_cleared": "存档清除成功",
"docs_cleared": "文档清除成功",
"import_success": "成功导入 {count} 条消息",
- "import_failed": "导入消息失败"
+ "import_failed": "导入消息失败",
+ "export_nomadnet_favourites": "导出 NomadNet 收藏布局",
+ "import_nomadnet_favourites": "导入 NomadNet 收藏布局",
+ "nomadnet_favourites_exported": "NomadNet 收藏布局已导出",
+ "nomadnet_favourites_export_failed": "无法导出 NomadNet 收藏",
+ "nomadnet_favourites_imported": "NomadNet 收藏布局已导入",
+ "nomadnet_favourites_import_failed": "无法导入 NomadNet 收藏文件"
},
"identities": {
"title": "身份",
@@ -1046,6 +1052,8 @@
"telemetry_location_request": "位置请求",
"start_call": "开始通话",
"share_contact": "分享联系人",
+ "share_contact_modal_title": "分享联系人",
+ "share_contact_search_placeholder": "搜索联系人…",
"custom_display_name": "自定义显示名称",
"stranger_banner_text": "此端点不在您的联系人中。陌生人附件已被阻止。",
"add_to_contacts": "添加到联系人",
@@ -1357,7 +1365,10 @@
"path_finder_not_found": "在超时时间内未找到路径",
"path_finder_dropped_and_requested": "路径已丢弃,正在重新请求",
"path_finder_failed": "路径查找请求失败",
- "path_finder_archive_loading": "正在查找归档快照..."
+ "path_finder_archive_loading": "正在查找归档快照...",
+ "export_section_favourites": "导出此分组的收藏",
+ "section_favourites_exported": "分组收藏已导出",
+ "section_favourites_export_failed": "无法导出分组收藏"
},
"forwarder": {
"title": "LXMF 转发器",
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────